using System;

namespace MetaView.Core;

/// <summary>
/// 一个简单的委托日志
/// </summary>
public class EasyLogger : LoggerBase
{
    private readonly Action<LogLevel, object, string, Exception> m_action;

    /// <summary>
    /// 一个简单的委托日志
    /// </summary>
    /// <param name="action">参数依次为：日志类型，触发源，消息，异常</param>
    public EasyLogger(Action<LogLevel, object, string, Exception> action)
    {
        this.m_action = action;
    }

    /// <summary>
    /// 一个简单的委托日志
    /// </summary>
    /// <param name="action">参数为日志消息输出。</param>
    public EasyLogger(Action<string> action)
    {
        void localAction(LogLevel logLevel, object source, string message, Exception exception)
        {
            action.Invoke(this.CreateLogString(logLevel, source, message, exception));
        }
        this.m_action = localAction;
    }

    /// <inheritdoc/>
    /// <param name="logLevel"></param>
    /// <param name="source"></param>
    /// <param name="message"></param>
    /// <param name="exception"></param>
    protected override void WriteLog(LogLevel logLevel, object source, string message, Exception exception)
    {
        try
        {
            this.m_action?.Invoke(logLevel, source, message, exception);
        }
        catch
        {
        }
    }
}